Открытая платформа для создания заботливой квартиры

Это датчик, который принимает два состояния: включено или выключено, в результате обнаружения движения в помещении, при помощи анализа отраженного радиосигнала (доплеровский эффект). На улице такой датчик лучше не применять, поскольку там слишком много помех: деревья, птицы, домашние питомцы и т.п. Вместо этого используйте схему разработки датчика движения на основе ИК-приемника.

Итак, вам потребуются следующие компоненты:

Название Назначение Цена, руб.
BLE JDY-08 Радиомодуль Bluetooth LE 140
Arduino Pro Mini Микроконтроллер для учета затраченной электроэнергии 135
RCWL-0516 Доплеровский датчик движения 70
DC-DC 0.9 - 3.3V DC-DC преобразователь 65

Помимо того, что датчик интегрирован с инфраструктурой умного дома, его преимущества еще и в том, что он в три раза дешевле китайского датчика движения, его не нужно прикреплять к потолку или стене, его можно разместить в любом удобном месте, ведь он работает от батареек или пальчиковых аккумуляторов.

Умный радио датчик движения

Чтобы датчик дольше проработал от двух элементов питания АА, рекомендуем удалить светодиоды с DC-DC преобразователя и микроконтроллера. Также с микроконтроллера лучше удалить стабилизатор.

Программирование

О том как настроить Arduino IDE и подключить микроконтроллер к ПК читайте в этой коротенькой инструкции. Для компиляции программы необходимо загрузить библиотеки и добавить их в Arduino IDE через меню Sketch - Install library:

#include <jdy8.h>
#include <LowPower.h>

#define SENSOR_PIN 2
#define BLE_VCC_PIN 11
#define BLE_RX 8
#define BLE_TX 7
#define BLE_RESET 9
volatile byte rcwlState = LOW;

void setup() {
  JDY8 ble(BLE_RX, BLE_TX, BLE_RESET);
  ble.configure("Motion-2");

  pinMode(SENSOR_PIN, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(SENSOR_PIN), waitForRCWL, CHANGE);
  waitForRCWL();
}

void loop() {
  byte nowState = digitalRead(SENSOR_PIN);
  if ( nowState != rcwlState ) {
    rcwlState =  nowState;
    reportRCWLStateChanged(rcwlState);
  }
  LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
}

void waitForRCWL() {
}

void reportRCWLStateChanged( byte state )
{
  pinMode(BLE_VCC_PIN, OUTPUT);
  digitalWrite(BLE_VCC_PIN, HIGH);

  delay(1000);

  JDY8 ble(BLE_RX, BLE_TX, BLE_RESET);
  ble.setData(0, state, true);
  pinMode(BLE_RX, INPUT);
  pinMode(BLE_TX, INPUT);

  LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
  digitalWrite(BLE_VCC_PIN, LOW);
  pinMode(BLE_VCC_PIN, INPUT);
}

Схема устройства

схема

Настройка HASS

Файл: /config/configuration.yaml

binary_sensor:
  - platform: cutecare
    name: Motion detector
    mac: 3c:a3:08:c6:82:10

Файл: /config/customize.yaml

binary_sensor.motion_detector:
  friendly_name: Движение

В приложении вы сможете отслеживать изменение состояния датчика:

Автоматизация

Здесь приведен достаточно простой пример автоматизации, который включает свет на кухне при обнаружении движения и отключает его через 10 минут после последнего обнаруженного движения. Конечно, более реалистичный сценарий потребует некоторого усложнения.

Файл: /config/automations.yaml

- alias: Включить свет на кухне, если обнаружено движение
  trigger:
    platform: state
    entity_id: binary_sensor.motion_detector
    to: 'on'
  action:
    service: homeassistant.turn_on
    entity_id: light.kitchen_light

- alias: Выключить свет на кухне через 10 минут после последнего движения
  trigger:
    platform: state
    entity_id: binary_sensor.motion_detector
    to: 'off'
    for:
      minutes: 10
  action:
    service: homeassistant.turn_off
    entity_id: light.kitchen_light